/*
 *
 *    Copyright (c) 2022 Project CHIP Authors
 *
 *    Licensed under the Apache License, Version 2.0 (the "License");
 *    you may not use this file except in compliance with the License.
 *    You may obtain a copy of the License at
 *
 *        http://www.apache.org/licenses/LICENSE-2.0
 *
 *    Unless required by applicable law or agreed to in writing, software
 *    distributed under the License is distributed on an "AS IS" BASIS,
 *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 *    See the License for the specific language governing permissions and
 *    limitations under the License.
 */

// THIS FILE IS GENERATED BY ZAP
// This file is generated from clusters-shared-Enums.h.zapt

#pragma once

#include <stdint.h>

namespace chip
{
namespace app
{
	namespace Clusters
	{
		namespace detail
		{
			// Enums shared across multiple clusters.

			// Enum for ChangeIndicationEnum
			enum class ChangeIndicationEnum : uint8_t {
				kOk = 0x00,
				kWarning = 0x01,
				kCritical = 0x02,
				// All received enum values that are not listed above will be mapped
				// to kUnknownEnumValue. This is a helper enum value that should only
				// be used by code to process how it handles receiving and unknown
				// enum value. This specific should never be transmitted.
				kUnknownEnumValue = 3,
			};

			// Enum for DegradationDirectionEnum
			enum class DegradationDirectionEnum : uint8_t {
				kUp = 0x00,
				kDown = 0x01,
				// All received enum values that are not listed above will be mapped
				// to kUnknownEnumValue. This is a helper enum value that should only
				// be used by code to process how it handles receiving and unknown
				// enum value. This specific should never be transmitted.
				kUnknownEnumValue = 2,
			};

			// Enum for LevelValueEnum
			enum class LevelValueEnum : uint8_t {
				kUnknown = 0x00,
				kLow = 0x01,
				kMedium = 0x02,
				kHigh = 0x03,
				kCritical = 0x04,
				// All received enum values that are not listed above will be mapped
				// to kUnknownEnumValue. This is a helper enum value that should only
				// be used by code to process how it handles receiving and unknown
				// enum value. This specific should never be transmitted.
				kUnknownEnumValue = 5,
			};

			// Enum for MeasurementMediumEnum
			enum class MeasurementMediumEnum : uint8_t {
				kAir = 0x00,
				kWater = 0x01,
				kSoil = 0x02,
				// All received enum values that are not listed above will be mapped
				// to kUnknownEnumValue. This is a helper enum value that should only
				// be used by code to process how it handles receiving and unknown
				// enum value. This specific should never be transmitted.
				kUnknownEnumValue = 3,
			};

			// Enum for MeasurementTypeEnum
			enum class MeasurementTypeEnum : uint16_t {
				kUnspecified = 0x00,
				kVoltage = 0x01,
				kActiveCurrent = 0x02,
				kReactiveCurrent = 0x03,
				kApparentCurrent = 0x04,
				kActivePower = 0x05,
				kReactivePower = 0x06,
				kApparentPower = 0x07,
				kRMSVoltage = 0x08,
				kRMSCurrent = 0x09,
				kRMSPower = 0x0A,
				kFrequency = 0x0B,
				kPowerFactor = 0x0C,
				kNeutralCurrent = 0x0D,
				kElectricalEnergy = 0x0E,
				kReactiveEnergy = 0x0F,
				kApparentEnergy = 0x10,
				// All received enum values that are not listed above will be mapped
				// to kUnknownEnumValue. This is a helper enum value that should only
				// be used by code to process how it handles receiving and unknown
				// enum value. This specific should never be transmitted.
				kUnknownEnumValue = 17,
			};

			// Enum for MeasurementUnitEnum
			enum class MeasurementUnitEnum : uint8_t {
				kPpm = 0x00,
				kPpb = 0x01,
				kPpt = 0x02,
				kMgm3 = 0x03,
				kUgm3 = 0x04,
				kNgm3 = 0x05,
				kPm3 = 0x06,
				kBqm3 = 0x07,
				// All received enum values that are not listed above will be mapped
				// to kUnknownEnumValue. This is a helper enum value that should only
				// be used by code to process how it handles receiving and unknown
				// enum value. This specific should never be transmitted.
				kUnknownEnumValue = 8,
			};

			// Enum for ProductIdentifierTypeEnum
			enum class ProductIdentifierTypeEnum : uint8_t {
				kUpc = 0x00,
				kGtin8 = 0x01,
				kEan = 0x02,
				kGtin14 = 0x03,
				kOem = 0x04,
				// All received enum values that are not listed above will be mapped
				// to kUnknownEnumValue. This is a helper enum value that should only
				// be used by code to process how it handles receiving and unknown
				// enum value. This specific should never be transmitted.
				kUnknownEnumValue = 5,
			};

			// Bitmaps shared across multiple clusters.

		} // namespace detail

		namespace Globals
		{
			// Global enums.

			// Enum for AreaTypeTag
			enum class AreaTypeTag : uint8_t {
				kAisle = 0x00,
				kAttic = 0x01,
				kBackDoor = 0x02,
				kBackYard = 0x03,
				kBalcony = 0x04,
				kBallroom = 0x05,
				kBathroom = 0x06,
				kBedroom = 0x07,
				kBorder = 0x08,
				kBoxroom = 0x09,
				kBreakfastRoom = 0x0A,
				kCarport = 0x0B,
				kCellar = 0x0C,
				kCloakroom = 0x0D,
				kCloset = 0x0E,
				kConservatory = 0x0F,
				kCorridor = 0x10,
				kCraftRoom = 0x11,
				kCupboard = 0x12,
				kDeck = 0x13,
				kDen = 0x14,
				kDining = 0x15,
				kDrawingRoom = 0x16,
				kDressingRoom = 0x17,
				kDriveway = 0x18,
				kElevator = 0x19,
				kEnsuite = 0x1A,
				kEntrance = 0x1B,
				kEntryway = 0x1C,
				kFamilyRoom = 0x1D,
				kFoyer = 0x1E,
				kFrontDoor = 0x1F,
				kFrontYard = 0x20,
				kGameRoom = 0x21,
				kGarage = 0x22,
				kGarageDoor = 0x23,
				kGarden = 0x24,
				kGardenDoor = 0x25,
				kGuestBathroom = 0x26,
				kGuestBedroom = 0x27,
				kGuestRoom = 0x29,
				kGym = 0x2A,
				kHallway = 0x2B,
				kHearthRoom = 0x2C,
				kKidsRoom = 0x2D,
				kKidsBedroom = 0x2E,
				kKitchen = 0x2F,
				kLaundryRoom = 0x31,
				kLawn = 0x32,
				kLibrary = 0x33,
				kLivingRoom = 0x34,
				kLounge = 0x35,
				kMediaTvRoom = 0x36,
				kMudRoom = 0x37,
				kMusicRoom = 0x38,
				kNursery = 0x39,
				kOffice = 0x3A,
				kOutdoorKitchen = 0x3B,
				kOutside = 0x3C,
				kPantry = 0x3D,
				kParkingLot = 0x3E,
				kParlor = 0x3F,
				kPatio = 0x40,
				kPlayRoom = 0x41,
				kPoolRoom = 0x42,
				kPorch = 0x43,
				kPrimaryBathroom = 0x44,
				kPrimaryBedroom = 0x45,
				kRamp = 0x46,
				kReceptionRoom = 0x47,
				kRecreationRoom = 0x48,
				kRoof = 0x4A,
				kSauna = 0x4B,
				kScullery = 0x4C,
				kSewingRoom = 0x4D,
				kShed = 0x4E,
				kSideDoor = 0x4F,
				kSideYard = 0x50,
				kSittingRoom = 0x51,
				kSnug = 0x52,
				kSpa = 0x53,
				kStaircase = 0x54,
				kSteamRoom = 0x55,
				kStorageRoom = 0x56,
				kStudio = 0x57,
				kStudy = 0x58,
				kSunRoom = 0x59,
				kSwimmingPool = 0x5A,
				kTerrace = 0x5B,
				kUtilityRoom = 0x5C,
				kWard = 0x5D,
				kWorkshop = 0x5E,
				kToilet = 0x5F,
				// All received enum values that are not listed above will be mapped
				// to kUnknownEnumValue. This is a helper enum value that should only
				// be used by code to process how it handles receiving and unknown
				// enum value. This specific should never be transmitted.
				kUnknownEnumValue = 40,
			};

			// Enum for AtomicRequestTypeEnum
			enum class AtomicRequestTypeEnum : uint8_t {
				kBeginWrite = 0x00,
				kCommitWrite = 0x01,
				kRollbackWrite = 0x02,
				// All received enum values that are not listed above will be mapped
				// to kUnknownEnumValue. This is a helper enum value that should only
				// be used by code to process how it handles receiving and unknown
				// enum value. This specific should never be transmitted.
				kUnknownEnumValue = 3,
			};

			// Enum for LandmarkTag
			enum class LandmarkTag : uint8_t {
				kAirConditioner = 0x00,
				kAirPurifier = 0x01,
				kBackDoor = 0x02,
				kBarStool = 0x03,
				kBathMat = 0x04,
				kBathtub = 0x05,
				kBed = 0x06,
				kBookshelf = 0x07,
				kChair = 0x08,
				kChristmasTree = 0x09,
				kCoatRack = 0x0A,
				kCoffeeTable = 0x0B,
				kCookingRange = 0x0C,
				kCouch = 0x0D,
				kCountertop = 0x0E,
				kCradle = 0x0F,
				kCrib = 0x10,
				kDesk = 0x11,
				kDiningTable = 0x12,
				kDishwasher = 0x13,
				kDoor = 0x14,
				kDresser = 0x15,
				kLaundryDryer = 0x16,
				kFan = 0x17,
				kFireplace = 0x18,
				kFreezer = 0x19,
				kFrontDoor = 0x1A,
				kHighChair = 0x1B,
				kKitchenIsland = 0x1C,
				kLamp = 0x1D,
				kLitterBox = 0x1E,
				kMirror = 0x1F,
				kNightstand = 0x20,
				kOven = 0x21,
				kPetBed = 0x22,
				kPetBowl = 0x23,
				kPetCrate = 0x24,
				kRefrigerator = 0x25,
				kScratchingPost = 0x26,
				kShoeRack = 0x27,
				kShower = 0x28,
				kSideDoor = 0x29,
				kSink = 0x2A,
				kSofa = 0x2B,
				kStove = 0x2C,
				kTable = 0x2D,
				kToilet = 0x2E,
				kTrashCan = 0x2F,
				kLaundryWasher = 0x30,
				kWindow = 0x31,
				kWineCooler = 0x32,
				// All received enum values that are not listed above will be mapped
				// to kUnknownEnumValue. This is a helper enum value that should only
				// be used by code to process how it handles receiving and unknown
				// enum value. This specific should never be transmitted.
				kUnknownEnumValue = 51,
			};

			// Enum for LocationTag
			enum class LocationTag : uint8_t {
				kIndoor = 0x00,
				kOutdoor = 0x01,
				kInside = 0x02,
				kOutside = 0x03,
				// All received enum values that are not listed above will be mapped
				// to kUnknownEnumValue. This is a helper enum value that should only
				// be used by code to process how it handles receiving and unknown
				// enum value. This specific should never be transmitted.
				kUnknownEnumValue = 4,
			};

			// Enum for MeasurementTypeEnum
			enum class MeasurementTypeEnum : uint16_t {
				kUnspecified = 0x00,
				kVoltage = 0x01,
				kActiveCurrent = 0x02,
				kReactiveCurrent = 0x03,
				kApparentCurrent = 0x04,
				kActivePower = 0x05,
				kReactivePower = 0x06,
				kApparentPower = 0x07,
				kRMSVoltage = 0x08,
				kRMSCurrent = 0x09,
				kRMSPower = 0x0A,
				kFrequency = 0x0B,
				kPowerFactor = 0x0C,
				kNeutralCurrent = 0x0D,
				kElectricalEnergy = 0x0E,
				kReactiveEnergy = 0x0F,
				kApparentEnergy = 0x10,
				kSoilMoisture = 0x11,
				// All received enum values that are not listed above will be mapped
				// to kUnknownEnumValue. This is a helper enum value that should only
				// be used by code to process how it handles receiving and unknown
				// enum value. This specific should never be transmitted.
				kUnknownEnumValue = 18,
			};

			// Enum for PositionTag
			enum class PositionTag : uint8_t {
				kLeft = 0x00,
				kRight = 0x01,
				kTop = 0x02,
				kBottom = 0x03,
				kMiddle = 0x04,
				kRow = 0x05,
				kColumn = 0x06,
				// All received enum values that are not listed above will be mapped
				// to kUnknownEnumValue. This is a helper enum value that should only
				// be used by code to process how it handles receiving and unknown
				// enum value. This specific should never be transmitted.
				kUnknownEnumValue = 7,
			};

			// Enum for PowerThresholdSourceEnum
			enum class PowerThresholdSourceEnum : uint8_t {
				kContract = 0x00,
				kRegulator = 0x01,
				kEquipment = 0x02,
				// All received enum values that are not listed above will be mapped
				// to kUnknownEnumValue. This is a helper enum value that should only
				// be used by code to process how it handles receiving and unknown
				// enum value. This specific should never be transmitted.
				kUnknownEnumValue = 3,
			};

			// Enum for RelativePositionTag
			enum class RelativePositionTag : uint8_t {
				kUnder = 0x00,
				kNextTo = 0x01,
				kAround = 0x02,
				kOn = 0x03,
				kAbove = 0x04,
				kFrontOf = 0x05,
				kBehind = 0x06,
				// All received enum values that are not listed above will be mapped
				// to kUnknownEnumValue. This is a helper enum value that should only
				// be used by code to process how it handles receiving and unknown
				// enum value. This specific should never be transmitted.
				kUnknownEnumValue = 7,
			};

			// Enum for StreamUsageEnum
			enum class StreamUsageEnum : uint8_t {
				kInternal = 0x00,
				kRecording = 0x01,
				kAnalysis = 0x02,
				kLiveView = 0x03,
				// All received enum values that are not listed above will be mapped
				// to kUnknownEnumValue. This is a helper enum value that should only
				// be used by code to process how it handles receiving and unknown
				// enum value. This specific should never be transmitted.
				kUnknownEnumValue = 4,
			};

			// Enum for TariffPriceTypeEnum
			enum class TariffPriceTypeEnum : uint8_t {
				kStandard = 0x00,
				kCritical = 0x01,
				kVirtual = 0x02,
				kIncentive = 0x03,
				kIncentiveSignal = 0x04,
				// All received enum values that are not listed above will be mapped
				// to kUnknownEnumValue. This is a helper enum value that should only
				// be used by code to process how it handles receiving and unknown
				// enum value. This specific should never be transmitted.
				kUnknownEnumValue = 5,
			};

			// Enum for TariffUnitEnum
			enum class TariffUnitEnum : uint8_t {
				kKWh = 0x00,
				kKVAh = 0x01,
				// All received enum values that are not listed above will be mapped
				// to kUnknownEnumValue. This is a helper enum value that should only
				// be used by code to process how it handles receiving and unknown
				// enum value. This specific should never be transmitted.
				kUnknownEnumValue = 2,
			};

			// Enum for TestGlobalEnum
			enum class TestGlobalEnum : uint8_t {
				kSomeValue = 0x00,
				kSomeOtherValue = 0x01,
				kFinalValue = 0x02,
				// All received enum values that are not listed above will be mapped
				// to kUnknownEnumValue. This is a helper enum value that should only
				// be used by code to process how it handles receiving and unknown
				// enum value. This specific should never be transmitted.
				kUnknownEnumValue = 3,
			};

			// Enum for ThreeLevelAutoEnum
			enum class ThreeLevelAutoEnum : uint8_t {
				kAuto = 0x00,
				kLow = 0x01,
				kMedium = 0x02,
				kHigh = 0x03,
				// All received enum values that are not listed above will be mapped
				// to kUnknownEnumValue. This is a helper enum value that should only
				// be used by code to process how it handles receiving and unknown
				// enum value. This specific should never be transmitted.
				kUnknownEnumValue = 4,
			};

			// Enum for WebRTCEndReasonEnum
			enum class WebRTCEndReasonEnum : uint8_t {
				kICEFailed = 0x00,
				kICETimeout = 0x01,
				kUserHangup = 0x02,
				kUserBusy = 0x03,
				kReplaced = 0x04,
				kNoUserMedia = 0x05,
				kInviteTimeout = 0x06,
				kAnsweredElsewhere = 0x07,
				kOutOfResources = 0x08,
				kMediaTimeout = 0x09,
				kLowPower = 0x0A,
				kPrivacyMode = 0x0B,
				kUnknownReason = 0x0C,
				// All received enum values that are not listed above will be mapped
				// to kUnknownEnumValue. This is a helper enum value that should only
				// be used by code to process how it handles receiving and unknown
				// enum value. This specific should never be transmitted.
				kUnknownEnumValue = 13,
			};

			// Global bitmaps.

			// Bitmap for TestGlobalBitmap
			enum class TestGlobalBitmap : uint32_t {
				kFirstBit = 0x1,
				kSecondBit = 0x2,
			};

		} // namespace Globals
	} // namespace Clusters
} // namespace app
} // namespace chip
